home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / oop55.zip / STREAM.ASM < prev    next >
Assembly Source File  |  1989-05-02  |  3KB  |  144 lines

  1. ; Turbo Pascal 5.5 object-oriented example
  2. ; Assembler code for OBJECTS.PAS unit
  3. ; Copyright (c) 1989 by Borland International, Inc.
  4.  
  5.         TITLE   Stream
  6.  
  7.         INCLUDE OBJECTS.INC
  8.  
  9. CODE    SEGMENT BYTE PUBLIC
  10.  
  11.         ASSUME  CS:CODE
  12.  
  13.         PUBLIC  Stream@Get
  14.  
  15. Stream@Get      PROC    FAR
  16.  
  17. @Self           EQU     (DWORD PTR [BP+6])
  18.  
  19.         PUSH    BP
  20.         MOV     BP,SP
  21.         PUSH    AX
  22.         MOV     AX,SP
  23.         PUSH    SS
  24.         PUSH    AX
  25.         MOV     AX,2
  26.         PUSH    AX
  27.         LES     DI,@Self
  28.         PUSH    ES
  29.         PUSH    DI
  30.         MOV     DI,ES:[DI]
  31.         CALL    [DI].Stream$Read
  32.         POP     BX
  33.         OR      BX,BX
  34.         JE      @@2
  35.         LES     DI,@Self
  36.         DEC     BX
  37.         CMP     BX,ES:[DI].Stream@TypeCount
  38.         JAE     @@1
  39.         PUSH    ES
  40.         PUSH    DI
  41.         LES     DI,ES:[DI].Stream@TypeList
  42.         SHL     BX,1
  43.         PUSH    WORD PTR ES:[DI+BX]
  44.         XOR     AX,AX
  45.         PUSH    AX
  46.         PUSH    AX
  47.         LES     DI,@Self
  48.         LES     DI,ES:[DI].Stream@ProcList
  49.         SHL     BX,1
  50.         SHL     BX,1
  51.         CALL    ES:[DI+BX].SProc@LoadProc
  52.         JMP     SHORT @@3
  53. @@1:    MOV     AX,-2
  54.         CALL    StreamError
  55. @@2:    XOR     AX,AX
  56.         MOV     DX,AX
  57. @@3:    POP     BP
  58.         RET     4
  59.  
  60. Stream@Get      ENDP
  61.  
  62.         PUBLIC  Stream@Put
  63.  
  64. Stream@Put      PROC    FAR
  65.  
  66. @B              EQU     (DWORD PTR [BP+10])
  67. @Self           EQU     (DWORD PTR [BP+6])
  68.  
  69.         PUSH    BP
  70.         MOV     BP,SP
  71.         LES     DI,@B
  72.         MOV     CX,ES
  73.         OR      CX,DI
  74.         JE      @@1
  75.         MOV     AX,ES:[DI]
  76.         LES     DI,@Self
  77.         MOV     CX,ES:[DI].Stream@TypeCount
  78.         JCXZ    @@2
  79.         MOV     BX,CX
  80.         LES     DI,ES:[DI].Stream@TypeList
  81.         CLD
  82.         REPNE   SCASW
  83.         JNE     @@2
  84.         NEG     CX
  85.         ADD     CX,BX
  86. @@1:    PUSH    CX
  87.         MOV     AX,SP
  88.         PUSH    SS
  89.         PUSH    AX
  90.         MOV     AX,2
  91.         PUSH    AX
  92.         LES     DI,@Self
  93.         PUSH    ES
  94.         PUSH    DI
  95.         MOV     DI,ES:[DI]
  96.         CALL    [DI].Stream$Write
  97.         POP     BX
  98.         DEC     BX
  99.         JS      @@3
  100.         LES     DI,@Self
  101.         PUSH    ES
  102.         PUSH    DI
  103.         PUSH    @B.w2
  104.         PUSH    @B.w0
  105.         LES     DI,ES:[DI].Stream@ProcList
  106.         SHL     BX,1
  107.         SHL     BX,1
  108.         SHL     BX,1
  109.         CALL    ES:[DI+BX].SProc@StoreProc
  110.         JMP     SHORT @@3
  111. @@2:    LES     DI,@Self
  112.         MOV     AX,-1
  113.         CALL    StreamError
  114. @@3:    POP     BP
  115.         RET     8
  116.  
  117. Stream@Put      ENDP
  118.  
  119. ; Stream error handler
  120. ; In    AX    = Error code
  121. ;       ES:DI = Stream object pointer
  122. ; Uses  AX,BX,CX,DX,SI
  123.  
  124.         PUBLIC  StreamError
  125.  
  126. StreamError     PROC    NEAR
  127.  
  128.         PUSH    ES
  129.         PUSH    DI
  130.         PUSH    AX
  131.         PUSH    ES
  132.         PUSH    DI
  133.         MOV     DI,ES:[DI]
  134.         CALL    [DI].Stream$Error
  135.         POP     DI
  136.         POP     ES
  137.         RET
  138.  
  139. StreamError     ENDP
  140.  
  141. CODE    ENDS
  142.  
  143.         END
  144.